home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / kowin / archive / sys / kowin14d.lzh / doc / library / dbserv.doc < prev    next >
Text File  |  1993-02-10  |  9KB  |  290 lines

  1.  
  2.            X68000 Ko-Window データベースサーバー
  3.  
  4.                    dbserv v1.20
  5.                             1993 2/10 小笠原博之
  6.  
  7.   Ko-Window にはもともと WSRV.RC と WSRV.RS によるリソースを持っています。こ
  8. のプログラムもそれと同様に、ウィンドウ上のデータを共通で管理するのが目的です。
  9. リソースと異なるのは以下の3点です。
  10.  
  11.     アプリケーションレベルでの実現
  12.     バイナリデータの共有化が目的である
  13.     動的に読み込むデータの管理レベルを持っている
  14.  
  15.   例えば hide さんのトランプのカードデータを共有化することができれば、非常に
  16. 効率が良くなるでしょう。
  17.  
  18.  
  19.  
  20. ●ファイル構成
  21.  
  22.     dbserv.doc    このファイル
  23.     dbserv.win    データベースサーバー
  24.     dbstat.win    サーバーの状態を表示するユーティリティ
  25.     dbslib.a    ライブラリ
  26.     dbslib.h    ライブラリのヘッダファイル
  27.     db_smpl.c    dbslib を使ったサンプルプログラムです
  28.     smpl.kdb    db_smpl.c によるサンプル共有データ
  29.  
  30.     dbsrc.lzh    ソース一式
  31.  
  32.  
  33.  
  34. ●サーバーの起動
  35.  
  36.     dbserv  [-m<num>]
  37.  
  38.   通常はそのまま実行してかまいません。設定に従い、static であれば即データを
  39. 読み込みます。サーバーのエラーは Console に出力します。
  40.  
  41.   サーバーはメモリに常駐するので、解除するには Command.win の kill コマンド
  42. 等を使って下さい。
  43.  
  44.   起動時に、-m オプションでデータ管理テーブルの個数を指定することができます。
  45. デフォルトは 32 です。
  46.  
  47. 注意: static データの読み込みエラーは dbserv が出力しますが、dynamic データの
  48.       エラー出力は、アプリケーションに依存することになります。
  49.  
  50.  
  51.  
  52. ● WSRV.RC の設定
  53.  
  54.   WSRV.RC の !DBserv に、予めサーバーがロードするデータファイルを記述してお
  55. くことができます。データを dynamic でのみ使用する場合には、特にこの設定は必
  56. 要ありません。サーバーを常駐させるだけで OK です。
  57.  
  58. ---- <例> ------------------------------------------------------------------
  59.  
  60. !DBserv
  61. CardColor    0    static        cards.kdb
  62. CardMono    0    dynamic        cardsmono.kdb
  63.  
  64. ----------------------------------------------------------------------------
  65.  
  66.   記述は1データあたり1行、それぞれ4項目で、以下のようになっています。
  67.  
  68.     [データ名]  [オプション番号]  [管理レベル]  [データファイル名]
  69.      ========    ==============    ==========    ================
  70.  
  71. データ名    :アプリケーション側からのデータアクセスは、全部このデータ名
  72. ========     によって行なわれます。(最大15byte) 大文字小文字を区別します。
  73.  
  74. オプション番号    :必ず 0 を指定しておいて下さい。ユーザー側から参照できますが
  75. ==============     現在未使用です。
  76.  
  77. 管理レベル    : 以下の2種類があります。
  78. ==========
  79.             static : サーバー起動時にデータを読み込み、データは常
  80.                  にメモリ上に保持されます。
  81.             dynamic: アプリケーションからのアクセス要求があって初
  82.                  めてメモリ上に読み込みます。アクセスするアプ
  83.                  リケーションがなくなると、勝手にメモリを開放
  84.                  します。
  85.  
  86.          この管理レベルとはサーバー内部の扱い方の違いだけなので、アプ
  87.          リケーションから見た場合、どちらでも全く同じようにアクセスし
  88.          て用いることができます。
  89.  
  90. データファイル名:そのデータのファイル名そのものを書いて下さい。パス名は必要あ
  91. ================ りません。データファイルの検索は、以下の順番で行なわれます。
  92.  
  93.  
  94.   ・環境変数 DBSERV が設定されている時
  95.  
  96.     1. 環境変数 DBSERV に設定してあるパス名
  97.         (パス名の最後には必ず"/"が必要)
  98.  
  99.     2. dbserv.win と同じディレクトリ
  100.  
  101.  
  102.   ・環境変数 DBSERV が設定されていない時
  103.  
  104.     1. カレントディレクトリ
  105.  
  106.     2. dbserv.win と同じディレクトリ
  107.  
  108.  
  109.  
  110. 注意!!  環境変数 DBSERV が定義されている場合はカレントディレクトリを検索し
  111.        ないことに注意して下さい。(不要なディスクアクセスを行なわないためです)
  112.  
  113. 注意!!  データファイル名は必ずファイル名だけ書いて下さい。(パスは書かない)
  114.  
  115.  
  116.  
  117. ●データベースへのアクセス
  118.  
  119.   ユーザーアプリケーションから、データベースへアクセスする方法を説明します。
  120. 付属のライブラリ dbslib.a とヘッダファイル dbslib.h を使います。
  121.  
  122.  
  123. void    *DBOpen( name )
  124. char    *name;
  125.  
  126.     データベースへのアクセスを宣言します。name は、アクセスを希望するデー
  127.     タベース名へのポインタです。見つからない場合は NULL を返します。
  128.  
  129.     戻り値はそのデータ領域へのポインタで、データファイルを読み込んだその
  130.     先頭に相当します。データ構造へは一切関与しませんので、利用者側で対処
  131.     して下さい。
  132.  
  133.  
  134. void    DBClose( name )
  135. char    *name;
  136.  
  137.     データベースへのアクセスを終了します。アクセスをやめる時は、必ずこれ
  138.     を呼び出して下さい。
  139.  
  140.  
  141. int    DBOption( name )
  142. char    *name;
  143.  
  144.     WSRV.RC の !DBserv でのオプション番号を返します。現在特に意味を持ち
  145.     ません。DBOpen() しなくてもこの関数を使用することができます。
  146.  
  147.  
  148. int    DBAddTable( name, option, level, file )
  149. char    *name;
  150. int    option;        WSRV.RC の !DBserv のオプション番号に相当する
  151. int    level;        管理レベル、現在は DBDynamic のみ使用可能
  152. char    *file;        登録するデータのファイル名
  153.  
  154.     サーバーの管理テーブルに、アプリケーション側からデータの追加を行ない
  155.     ます。もし同じ名前のデータがすでに登録されている時は何もしません。各
  156.     アプリケーションが、DBOpen() する前にこのファンクションを呼び出すこ
  157.     とで、WSRV.RC への設定追加の手間を軽減させることができます。ただし、
  158.     現在アプリ側で追加できるデータは dynamic に限ります。
  159.  
  160.     すでに定義されていたなど、登録に失敗すると FALSE を返します。ただし、
  161.     ここでのエラーチェックは省いて、その後の DBOpen() 時のみ確認するよう
  162.     にしても構いません。
  163.  
  164.     DBAddTable( "Cards", 0, DBDynamic, "Cards.kdb" )
  165.  
  166.  
  167. int    DBUserCheck( info )
  168. EventInfo *info;
  169.  
  170.     EventUser で使用するライブラリです。データベースサーバーの DBkill コ
  171.     マンドの判定を行ないます。もし DBkill なら TRUE、それ以外の EventUser
  172.     なら FALSE を返します。これはサーバー呼び出しはしません。
  173.  
  174.     通常は、EventUser の最初でこの関数を呼び出し、もし TRUE が返ってきた
  175.     らアプリケーションを即座に終了させることになるでしょう。この終了時は
  176.     DBClose() 等のサーバーコールを行なってはいけません。
  177.  
  178.  
  179.  
  180. ●データの使用方法
  181.  
  182.   一度 DBOpen() でデータのポインタを獲得しておき、後はそのポインタに従って自
  183. 由にアクセスを行なって下さい。1つのアプリケーションで、多数のデータへアクセ
  184. スを行なってもかまいません。ただし、データをアプリケーション側で書き換えては
  185. いけません。DBOpen() したデータは、必ず DBClose() する必要があります。
  186.  
  187.   DBOpen() に失敗した時はデータアクセスができませんから、必ず戻り値をチェッ
  188. クし、必要ならエラー終了させるようにして下さい。(この場合もすでに DBOpen()
  189. しているものは DBClose() させることを忘れないように)
  190.  
  191.   アプリケーション終了時には必ずすべてのデータを DBClose() するようにして下
  192. さい。
  193.  
  194.  
  195.   ポインタアクセスが前提なので、頻繁にアクセスされるデータを毎回 DBOpen() す
  196. るのは好ましくありません。(例えば EventRedraw のたびに DBOpen() & DBClose()
  197. を行なうなど)EventOpen 等でデータを開いて先にポインタを獲得しておいて下さい。
  198.  
  199.   ですが、さほど重要でないデータを一時的にアクセスする場合においては、DBOpen()
  200. と DBClose() をペアにしたアクセスが可能です。イベント開放をはさまなければ、
  201. この場合 EventUser によるデータ破棄のチェックを行なう必要がありません。
  202.  
  203.  
  204.  
  205. ●データ破棄のチェック
  206.  
  207.   データはポインタアクセスですから、イベントの切れ目では先にサーバーが終了し
  208. てしまう可能性があります。その場合はもちろん、アクセス先のデータがなくなり、
  209. 不都合が起こることになります。
  210.  
  211.   Console では、これを避けるためにイベント毎に ConsoleOpen() を走らせてチェッ
  212. クしています。データベースアクセスの場合は、いちいちチェックを行うのはたいへ
  213. んですから、EventUser を使用することにしました。
  214.  
  215.   サーバーは、kill による終了時など、アクセスされているデータがあるにもかかわ
  216. らずデータを開放しなければならない場合に、以下のイベントをすべてのプロセスに
  217. 発生させます。
  218.  
  219.     info->optiono = EventUser;
  220.     info->ComData = 'DBsv';
  221.     info->ComBuffer= コマンド
  222.  
  223.  info->ComBuffer には UserStrings と同様 char ** が入り、サーバーからのコマ
  224. ンドが入ります。現在以下のコマンドが定義されています。
  225.  
  226.     info->ComBuffer = {"DBkill"}
  227.  
  228.     アクセスされているデータがあるにもかかわらず、全部のデータを強制破棄
  229.     することを意味します。dbserver が killされた場合など。アクセスされて
  230.     いるデータがない場合にはこのイベントは発生しません。
  231.  
  232.     info->ComBuffer = {"DBdel", データ名 .. , NULL }
  233.  
  234.     アクセスされている特定のデータを強制破棄することを意味します。ただし、
  235.     管理レベルが static のデータは、DBkill 以外で破棄されることはありませ
  236.     ん。アクセスされていないデータが破棄される場合には、このイベントは発
  237.     生しません。(注: 現在のサーバーは、このコマンドを発生させることはあ
  238.     りません)
  239.  
  240.  
  241. そのデータの破棄が送られてきた場合は、もしアクセス中であってもそのデータを
  242.  DBClose() する必要はありません。
  243.  
  244.   カードゲーム等、DBkill によってパターンデータがアクセス不可能になった場合
  245. は、アプリケーションとしての実行が不可能になります。よって実質上この DBkill
  246. コマンドは、アプリケーションに対する強制終了命令といえるでしょう。
  247.  
  248.  
  249.  
  250. ●データの作成
  251.  
  252.   サーバーが扱うデータは、特に圧縮等は行なわずそのままメモリ上に読み込みます。
  253. データサイズは今のところアプリケーション側から知る手段はありませんので、デー
  254. タやアプリケーション側で対処して下さい。
  255.  
  256.   作成したデータを公開する場合は、それをアクセスするための構造を記述した、C
  257. 言語ヘッダファイル等を用意するのが好ましいでしょう。アクセス用のライブラリを
  258. 作る等はすべてサーバー利用者にお任せします。
  259.  
  260.  
  261.  
  262. ●サーバーの状態表示ユーティリティ
  263.  
  264.   付属の dbstat.win は、サーバーの管理テーブルの状態を Console に出力します。
  265. 起動オプションはありません。デバッグに役立てて下さい。
  266.  
  267.  
  268.  
  269. ●注意
  270.  
  271.   まだ実験段階で、仕様は今後も修正されていく可能性があります。特に構造体内容
  272. が修正される可能性があるため、必ずライブラリを通し、直接管理テーブルをたどる
  273. ようなアクセスは控えて下さい。
  274.  
  275.  
  276.  
  277. ●配布
  278.  
  279.   プログラム部の著作権は作者が保持します。gcc コンパイルされ、XC v1、gnulib.a
  280.  wlib.a のライブラリを含んでいます。このプログラムの配布、利用は自由です。
  281.  
  282.  
  283.  
  284. ●連絡先
  285.  
  286.     oga@dgw.yz.yamagata-u.ac.jp
  287.     DenDen-NET: DEN0006 COR.
  288.     SPS-NET:    SPS0783 COR.
  289.  
  290.